import os
import sys

g_ascii_table = [["Bin     ",  "Dec",  "Hex",  "Ascii",  "Tip        "],
                ["0000 0000",  "0",  "0x00",  "NULL",  "空字符"],
                ["0000 0001",  "1",  "0x01",  "SOH",  "标题开始"],
                ["0000 0010",  "2",  "0x02",  "STX",  "正文开始"],
                ["0000 0011",  "3",  "0x03",  "ETX",  "正文结束"],
                ["0000 0100",  "4",  "0x04",  "EOT",  "传输结束"],
                ["0000 0101",  "5",  "0x05",  "ENQ",  "请求    "],
                ["0000 0110",  "6",  "0x06",  "ACK",  "收到通知"],
                ["0000 0111",  "7",  "0x07",  "BEL",  "响铃    "],
                ["0000 1000",  "8",  "0x08",  "BS",  "退格    "],
                ["0000 1001",  "9",  "0x09",  "HT",  "水平制表符"],
                ["0000 1010",  "10",  "0x0A",  "LF",  "换行键   "],
                ["0000 1011",  "11",  "0x0B",  "VT",  "垂直制表符"],
                ["0000 1100",  "12",  "0x0C",  "FF",  "换页键   "],
                ["0000 1101",  "13",  "0x0D",  "CR",  "回车键   "],
                ["0000 1110",  "14",  "0x0E",  "SO",  "不用切换"],
                ["0000 1111",  "15",  "0x0F",  "SI",  "启用切换"],
                ["0001 0000",  "16",  "0x10",  "DLE",  "数据链路转义"],
                ["0001 0001",  "17",  "0x11",  "DC1",  "设备控制1"],
                ["0001 0010",  "18",  "0x12",  "DC2",  "设备控制2"],
                ["0001 0011",  "19",  "0x13",  "DC3",  "设备控制3"],
                ["0001 0100",  "20",  "0x14",  "DC4",  "设备控制4"],
                ["0001 0101",  "21",  "0x15",  "NAK",  "拒绝接收"],
                ["0001 0110",  "22",  "0x16",  "SYN",  "同步空闲"],
                ["0001 0111",  "23",  "0x17",  "ETB",  "结束传输块"],
                ["0001 1000",  "24",  "0x18",  "CAN",  "取消    "],
                ["0001 1001",  "25",  "0x19",  "EM",  "媒介结束"],
                ["0001 1010",  "26",  "0x1A",  "SUB",  "代替    "],
                ["0001 1011",  "27",  "0x1B",  "ESC",  "换码(溢出)"],
                ["0001 1100",  "28",  "0x1C",  "FS",  "文件分隔符"],
                ["0001 1101",  "29",  "0x1D",  "GS",  "分组符"],
                ["0001 1110",  "30",  "0x1E",  "RS",  "记录分隔符"],
                ["0001 1111",  "31",  "0x1F",  "US",  "单元分隔符"],
                ["0010 0000",  "32",  "0x20",  " ",  "空格    "],
                ["0010 0001",  "33",  "0x21",  "!",  "叹号    "],
                ["0010 0010",  "34",  "0x22",  "\"",  "双引号  "],
                ["0010 0011",  "35",  "0x23",  "#",  "井号    "],
                ["0010 0100",  "36",  "0x24",  "$",  "美元符  "],
                ["0010 0101",  "37",  "0x25",  "%",  "百分号  "],
                ["0010 0110",  "38",  "0x26",  "&",  "和号    "],
                ["0010 0111",  "39",  "0x27",  "'",  "闭单引号"],
                ["0010 1000",  "40",  "0x28",  "(",  "开括号"],
                ["0010 1001",  "41",  "0x29",  ")",  "闭括号"],
                ["0010 1010",  "42",  "0x2A",  "*",  "星号    "],
                ["0010 1011",  "43",  "0x2B",  "+",  "加号    "],
                ["0010 1100",  "44",  "0x2C",  ",",  "逗号    "],
                ["0010 1101",  "45",  "0x2D",  "-",  "减号/破折号"],
                ["0010 1110",  "46",  "0x2E",  ".",  "句号    "],
                ["0010 1111",  "47",  "0x2F",  "/",  "斜杠    "],
                ["0011 0000",  "48",  "0x30",  "0",  "字符0    "],
                ["0011 0001",  "49",  "0x31",  "1",  "字符1    "],
                ["0011 0010",  "50",  "0x32",  "2",  "字符2    "],
                ["0011 0011",  "51",  "0x33",  "3",  "字符3    "],
                ["0011 0100",  "52",  "0x34",  "4",  "字符4    "],
                ["0011 0101",  "53",  "0x35",  "5",  "字符5    "],
                ["0011 0110",  "54",  "0x36",  "6",  "字符6    "],
                ["0011 0111",  "55",  "0x37",  "7",  "字符7    "],
                ["0011 1000",  "56",  "0x38",  "8",  "字符8    "],
                ["0011 1001",  "57",  "0x39",  "9",  "字符9    "],
                ["0011 1010",  "58",  "0x3A",  ":",  "冒号    "],
                ["0011 1011",  "59",  "0x3B",  ";",  "分号    "],
                ["0011 1100",  "60",  "0x3C",  "<",  "小于    "],
                ["0011 1101",  "61",  "0x3D",  "=",  "等号    "],
                ["0011 1110",  "62",  "0x3E",  ">",  "大于    "],
                ["0011 1111",  "63",  "0x3F",  "?",  "问号    "],
                ["0100 0000",  "64",  "0x40",  "@",  "电子邮件符号"],
                ["0100 0001",  "65",  "0x41",  "A",  "大写字母A"],
                ["0100 0010",  "66",  "0x42",  "B",  "大写字母B"],
                ["0100 0011",  "67",  "0x43",  "C",  "大写字母C"],
                ["0100 0100",  "68",  "0x44",  "D",  "大写字母D"],
                ["0100 0101",  "69",  "0x45",  "E",  "大写字母E"],
                ["0100 0110",  "70",  "0x46",  "F",  "大写字母F"],
                ["0100 0111",  "71",  "0x47",  "G",  "大写字母G"],
                ["0100 1000",  "72",  "0x48",  "H",  "大写字母H"],
                ["0100 1001",  "73",  "0x49",  "I",  "大写字母I"],
                ["0100 1010",  "74",  "0x4A",  "J",  "大写字母J"],
                ["0100 1011",  "75",  "0x4B",  "K",  "大写字母K"],
                ["0100 1100",  "76",  "0x4C",  "L",  "大写字母L"],
                ["0100 1101",  "77",  "0x4D",  "M",  "大写字母M"],
                ["0100 1110",  "78",  "0x4E",  "N",  "大写字母N"],
                ["0100 1111",  "79",  "0x4F",  "O",  "大写字母O"],
                ["0101 0000",  "80",  "0x50",  "P",  "大写字母P"],
                ["0101 0001",  "81",  "0x51",  "Q",  "大写字母Q"],
                ["0101 0010",  "82",  "0x52",  "R",  "大写字母R"],
                ["0101 0011",  "83",  "0x53",  "S",  "大写字母S"],
                ["0101 0100",  "84",  "0x54",  "T",  "大写字母T"],
                ["0101 0101",  "85",  "0x55",  "U",  "大写字母U"],
                ["0101 0110",  "86",  "0x56",  "V",  "大写字母V"],
                ["0101 0111",  "87",  "0x57",  "W",  "大写字母W"],
                ["0101 1000",  "88",  "0x58",  "X",  "大写字母X"],
                ["0101 1001",  "89",  "0x59",  "Y",  "大写字母Y"],
                ["0101 1010",  "90",  "0x5A",  "Z",  "大写字母Z"],
                ["0101 1011",  "91",  "0x5B",  "[",  "开方括号"],
                ["0101 1100",  "92",  "0x5C",  "\\",  "反斜杠  "],
                ["0101 1101",  "93",  "0x5D",  "]",  "闭方括号"],
                ["0101 1110",  "94",  "0x5E",  "^",  "脱字符  "],
                ["0101 1111",  "95",  "0x5F",  "_",  "下划线  "],
                ["0110 0000",  "96",  "0x60",  "`",  "开单引号"],
                ["0110 0001",  "97",  "0x61",  "a",  "小写字母a"],
                ["0110 0010",  "98",  "0x62",  "b",  "小写字母b"],
                ["0110 0011",  "99",  "0x63",  "c",  "小写字母c"],
                ["0110 0100",  "100",  "0x64",  "d",  "小写字母d"],
                ["0110 0101",  "101",  "0x65",  "e",  "小写字母e"],
                ["0110 0110",  "102",  "0x66",  "f",  "小写字母f"],
                ["0110 0111",  "103",  "0x67",  "g",  "小写字母g"],
                ["0110 1000",  "104",  "0x68",  "h",  "小写字母h"],
                ["0110 1001",  "105",  "0x69",  "i",  "小写字母i"],
                ["0110 1010",  "106",  "0x6A",  "j",  "小写字母j"],
                ["0110 1011",  "107",  "0x6B",  "k",  "小写字母k"],
                ["0110 1100",  "108",  "0x6C",  "l",  "小写字母l"],
                ["0110 1101",  "109",  "0x6D",  "m",  "小写字母m"],
                ["0110 1110",  "110",  "0x6E",  "n",  "小写字母n"],
                ["0110 1111",  "111",  "0x6F",  "o",  "小写字母o"],
                ["0111 0000",  "112",  "0x70",  "p",  "小写字母p"],
                ["0111 0001",  "113",  "0x71",  "q",  "小写字母q"],
                ["0111 0010",  "114",  "0x72",  "r",  "小写字母r"],
                ["0111 0011",  "115",  "0x73",  "s",  "小写字母s"],
                ["0111 0100",  "116",  "0x74",  "t",  "小写字母t"],
                ["0111 0101",  "117",  "0x75",  "u",  "小写字母u"],
                ["0111 0110",  "118",  "0x76",  "v",  "小写字母v"],
                ["0111 0111",  "119",  "0x77",  "w",  "小写字母w"],
                ["0111 1000",  "120",  "0x78",  "x",  "小写字母x"],
                ["0111 1001",  "121",  "0x79",  "y",  "小写字母y"],
                ["0111 1010",  "122",  "0x7A",  "z",  "小写字母z"],
                ["0111 1011",  "123",  "0x7B",  "{",  "开花括号"],
                ["0111 1100",  "124",  "0x7C",  "|",  "垂线    "],
                ["0111 1101",  "125",  "0x7D",  "}",  "闭花括号"],
                ["0111 1110",  "126",  "0x7E",  "~",  "波浪号   "],
                ["0111 1111",  "127",  "0x7F",  "DEL",  "删除    "]] ## <<共计生成行数量: 129 项>>

def L_GetBinStr(int_val:int, bit_len = 8):
    str = ''
    for i in range(bit_len):
        if (int_val & (1 << i)) == 0:
            str = '0' + str
        else:
            str = '1' + str

    return str

def L_GetHexStr(int_val:int, bit_len = 8):
    str = hex(int_val, )

    return str


def L_PrintAsciiTab():
    item = g_ascii_table[0]
    title_str = f"| {item[0]}\t| {item[1]}\t | {item[2]}\t | {item[3]} | {item[4]}\t |\n"
    print(title_str, end='')
    for i in title_str:
        print("-", end='')
    print('', end='\n')

    for item in g_ascii_table[1:]:
        print(f"| {item[0]}\t| {item[1]}\t | {item[2]}\t | {item[3]}\t | {item[4]}\t |", end='\n')


def L_OptHex2Dec(param: list[str]):

    pass


def L_OptHex2Ascii(param: list[str]):
    cnt = 0
    for hex in param:
        hex.replace('0x', '')
        hex.replace(' ', '')
        datas = [hex[i:i+2] for i in range(0, len(hex), 2)]
        for data in datas:
            int_val = int(data.__str__(), base=16)
            print(chr(int_val), end='')
            cnt += 1
        print("", end='')
        
    print(f"\n<cnt_byte: {cnt}>")
    pass


if __name__ == '__main__':
    argc = sys.argv.__len__()
    argv = sys.argv

    if argc == 1:
        L_PrintAsciiTab()
    elif argc == 2:
        param = argv[1]
        if param == '-v':
            print("20230628_1")
        elif param == '-h':
            print("Jpz: 暂时没做")
        else:
            print("Param Invalid\n")
    else:
        opt = argv[1]
        param = argv[2:]

        if opt == '-h2d':
            L_OptHex2Dec(param)
        elif opt == '-h2a':
            L_OptHex2Ascii(param)
        else:
            print(f"Jpz: 暂不支持 {opt} 操作\n")
        pass

